#include "ch32f10x.h"
#include "delay.h"
#include "key.h"

// 定义GPIOB引脚的宏
#define VALVE_PIN GPIO_PIN_3       // 定义气阀控制引脚
#define MODE_SELECT_PIN GPIO_PIN_4 // 定义模式选择引脚
#define FUNCTION_PIN GPIO_PIN_5    // 定义开始和停止功能引脚

#define VALVE_PORT GPIOB       // 气阀控制
#define MODE_SELECT_PORT GPIOB // 模式选择
#define FUNCTION_PORT GPIOB    // 开始和停止功能

// 定义控制状态的宏
#define PIN_SET GPIO_PIN_SET
#define PIN_RESET GPIO_PIN_RESET

void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能GPIOB时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();

    // 初始化PB3, PB4, PB5为推挽输出
    GPIO_InitStruct.Pin = VALVE_PIN | MODE_SELECT_PIN | FUNCTION_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    // 初始化后，将PB3, PB4, PB5设置为低电平
    HAL_GPIO_WritePin(VALVE_PORT, VALVE_PIN, PIN_RESET);
    HAL_GPIO_WritePin(MODE_SELECT_PORT, MODE_SELECT_PIN, PIN_RESET);
    HAL_GPIO_WritePin(FUNCTION_PORT, FUNCTION_PIN, PIN_RESET);
}

void VALVE_Control(uint8_t state) // 气阀控制
{
    HAL_GPIO_WritePin(VALVE_PORT, VALVE_PIN, state ? PIN_SET : PIN_RESET);
}

void MODE_Select(uint8_t mode) // 模式选择
{
    HAL_GPIO_WritePin(MODE_SELECT_PORT, MODE_SELECT_PIN, mode ? PIN_SET : PIN_RESET);
}

void FUNCTION_Control(uint8_t command) // 开始和停止功能
{
    HAL_GPIO_WritePin(FUNCTION_PORT, FUNCTION_PIN, command ? PIN_SET : PIN_RESET);
}